﻿using IQReportes.Models;
using IQReportes.Models.Logica;
using IQReportes.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace IQReportes.ViewModels
{
    /// <summary>
    /// Clase perfil para la vista
    /// </summary>
    public class PerfilViewModel
    {
        /// <summary>
        /// id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// nombre
        /// </summary>
        [DisplayName("Nombre")]
        [RangoLongitud(5, 20)]
        [Required]
        public string nombre { get; set; }
        /// <summary>
        /// descripción
        /// </summary>
        [DisplayName("Descripción")]
        [RangoLongitud(5, 50)]
        [Required]
        public string descripcion { get; set; }
        /// <summary>
        /// es administrador
        /// </summary>
        public bool admin { get; set; }
        /// <summary>
        /// tiene permisos para subir archivos
        /// </summary>
        [DisplayName("Carga de archivos")]
        public bool subirArchivo { get; set; }
        /// <summary>
        /// cantidad de usuarios relacionados al perfil
        /// </summary>
        public int cantidadUsuarios { get; set; }
        /// <summary>
        /// módulos de vista transacción
        /// </summary>
        public List<ModuloInfoViewModel> moduloTx { get; set; }
        /// <summary>
        /// módulo de vista panel de control
        /// </summary>
        public List<ModuloInfoViewModel> moduloPC { get; set; }
        /// <summary>
        /// constructor
        /// </summary>
        public PerfilViewModel() {
            LogicaModulo logicaModulo = new LogicaModulo();
            moduloTx = logicaModulo.getNuevaLista(1);
            moduloPC = logicaModulo.getNuevaLista(2);
        }
        /// <summary>
        /// constructor ocn parámetros
        /// </summary>
        /// <param name="perfil">perfil</param>
        public PerfilViewModel(Perfil perfil)
        {
            this.id = perfil.idPerfil + "";
            this.nombre = perfil.vcNombre;
            this.descripcion = perfil.vcDescripcion;
            this.admin = perfil.bAdmin;
            this.cantidadUsuarios = perfil.inCantidadUsuarios;
            this.subirArchivo = perfil.bSubirArchivo;

            moduloTx = new List<ModuloInfoViewModel>();
            moduloPC = new List<ModuloInfoViewModel>();
        }

        /// <summary>
        /// Convertir PerfilViewModel a Perfil
        /// </summary>
        /// <returns></returns>
        public Perfil extract()
        {
            Perfil p = new Perfil();
            p.idPerfil = (this.id == null) ? -1 :Int32.Parse(this.id);
            p.vcNombre = this.nombre;
            p.vcDescripcion = this.descripcion;
            p.inCantidadUsuarios = this.cantidadUsuarios;
            p.bAdmin = this.admin;
            p.bSubirArchivo = this.subirArchivo;
            return p;
        }
    }
}